
//992.K个不同整数的子数组
class Solution {
public:
    //不同整数的个数恰好为K=不同整数的个数大于等于K-不同整数的个数大于等于K+1
    int numMore(vector<int>& nums,int pos)
    {
        unordered_map<int ,int> mm;
        int left=0;
        int n=nums.size(),ret=0;
        for(int right=0;right<n;right++)
        {
            mm[nums[right]]++;     //进窗口
            while(mm.size()>=pos)
            {
                if(--mm[nums[left]]==0) mm.erase(nums[left]);   //出窗口
                left++;  
            }
            ret+=left;   //更新答案
        }
        return ret;
    
    }

    int subarraysWithKDistinct(vector<int>& nums, int k) {
        return numMore(nums,k)-numMore(nums,k+1);
    }
};